#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1e4+10,M=5e4+10;
int e[M],ne[M],h[N],idx;
int dfn[N],low[N],timestamp;
int stk[N],top;
bool in_stk[N];
int id[N],_size[N],scc_cnt;
int dout[N];
void add(int a,int b)
{
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}
void tarjan(int u)
{
    dfn[u]=low[u]=++timestamp;
    stk[++top]=u; in_stk[u]=true;

    for(int i=h[u];~i;i=ne[i])
    {
        int j=e[i];
        if(!dfn[j])
        {
            tarjan(j);
            low[u]=min(low[u],low[j]);
        }
        else low[u]=min(low[u],dfn[j]);
    }

    if(dfn[u]==low[u])
    {
        int y=0;
        scc_cnt++;
        do
        {
            y=stk[top--];
            in_stk[y]=false;
            id[y]=scc_cnt;
            _size[scc_cnt]++;

        }while(y!=u);
    }
}
int main()
{
    memset(h,-1,sizeof(h));
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b;
        cin>>a>>b;
        add(a,b);
    }
    for(int i=1;i<=n;i++)
    {
        if(!dfn[i]) tarjan(i);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=h[i];~j;j=ne[j])
        {
            int k=e[j];;
            int a=id[i],b=id[k];
            if(a!=b) dout[a]++;
        }
    }
    int sum=0;
    for(int i=1;i<=scc_cnt;i++)
    {
        if(dout[i]==0)
        {
            if(sum)
            {
                sum=0;
                break;
            }
            sum=_size[i];
        }
    }
    cout<<sum;
    return 0;
}
